home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 011 / misc2.cq / misc.c
Text File  |  1984-04-05  |  5KB  |  197 lines

  1. /*
  2. This is a collection of miscellaneous routines written in CI-C86.  They use
  3. some of CI's library routines, although these are either standard or easily
  4. written.  I *think* the only non-standard one is sysint(irpt, regs, regs),
  5. where irpt is the interrupt desired, and regs are defined as:
  6.  
  7.     struct reg_set { int ax, bx, cx, dx, si, di, ds, es; } *regs;
  8.  
  9. The functionality should be obvious.  I make no claims; specifically, I did
  10. not clean them up.  They aren't well documented, but are small and simple,
  11. so you shouldn't have many problems.
  12.  
  13. The file format is CI's ARCHive format.  If you don't have ARCH, '-ARCHIVE-'
  14. starts lines separating files.  Just split them there with an editor (and get
  15. rid of the line).  The file name and size is also on the separator line.
  16.  
  17. Questions, comments, flames, vegetables, etc. can be sent to Alan Batie via:
  18.  
  19.  
  20.          >>----->>-------------( Nathan C. Myers )-----------------\
  21.                /                                                    |
  22.               |  ...!decvax!tektronix!ogcvax!hp-pcd!orstcs!nathan   |
  23.               |           nathan.oregon-state@RAND-RELAY            |
  24.                \___________________________________________________/
  25.  
  26.  
  27. ---------------------------------Tear off here---------------------------------
  28. */
  29. -ARCHIVE- beep.c 402
  30. beep(freq, length)
  31.     int freq;
  32.     double length;
  33.     {
  34.     int port_stat;
  35.     int divisor;
  36.  
  37.     divisor = (long) 1193180 / (long) freq;
  38.  
  39.     outportb(0x43, 0xB6);    /*  Speaker control port  */
  40.     outportb(0x42, (divisor & 0xFF));    /*  Set frequency  */
  41.     outportb(0x42, ((divisor >> 8) & 0xFF));
  42.  
  43.     port_stat = inportb(0x61);
  44.     outportb(0x61, port_stat | 0x03);
  45.     pause(length);
  46.     outportb(0x61, port_stat);
  47.     }
  48. -ARCHIVE- itoa.c 830
  49. /*
  50.  *  This itoa is not perfect by any means, but at least it doesn't call
  51.  *  in the floating point library (sprintf), and is certainly quicker.
  52.  *
  53.  *  Written by Alan Batie & Nathan Myers, 3-1-1984
  54.  */
  55.  
  56. itoa(val, buf)
  57.     int val;
  58.     char *buf;
  59.     {
  60.     int buf_idx;
  61.     int j;
  62.     int div_idx;
  63.     int first;
  64.     static int divisors[] = { 10000, 1000, 100, 10, 1 };
  65.  
  66.     buf_idx = 0;
  67.  
  68.  
  69.     if (val == 0)
  70.         {
  71.         buf[0] = '0';
  72.         buf[1] = '\0';
  73.         return;
  74.         }
  75.     else if (val == -32768)
  76.         {
  77.         strcpy(buf, "-32768");
  78.         return;
  79.         }
  80.  
  81.     if (val < 0)
  82.         {
  83.         buf[buf_idx++] = '-';
  84.         val = -val;
  85.         }
  86.  
  87.     first = 1;
  88.     div_idx = 0;
  89.  
  90.     while (val)
  91.         {
  92.         j = val / divisors[div_idx];
  93.         if (j != 0 || first != 1)
  94.             {
  95.             buf[buf_idx++] = j + '0';
  96.             first = 0;
  97.             }
  98.         val %= divisors[div_idx++];
  99.         }
  100.  
  101.     buf[buf_idx] = '\0';
  102.     }
  103. -ARCHIVE- pause.c 133
  104. #define DELAY 25400
  105.  
  106. pause(seconds)
  107. double seconds;
  108.     {
  109.     long timer;
  110.  
  111.     for (timer = seconds * DELAY; timer > 0; timer--);
  112.     }
  113. -ARCHIVE- timedate.c 874
  114. /*
  115.  *  File name:        timedate.c
  116.  *
  117.  *  Belongs to:        Extended C library
  118.  *  Description:    Routines to return the current system date and time
  119.  *
  120.  *  Version:        1.1
  121.  *  History:        x/x/84 - Original code
  122.  *  Last change:    x/x/84 - Cleaned up for version 2 library
  123.  *  Author:        Alan Batie
  124.  */
  125.  
  126. #include "stdio.h"
  127. #include "stdext.h"
  128. #include "timedate.h"
  129.  
  130. get_date( date )
  131. struct date_struct *date;
  132. {
  133.   struct reg_set regs;
  134.  
  135.   regs.ax = 0x2A00;
  136.   sysint(0x21, ®s, ®s);
  137.  
  138.   date->month = (regs.dx >> 8) & 0xFF;
  139.   date->day = regs.dx & 0xFF;
  140.   date->year = regs.cx;
  141. }
  142.  
  143. get_time( time )
  144. struct time_struct *time;
  145. {
  146.   struct reg_set regs;
  147.  
  148.   regs.ax = 0x2C00;
  149.   sysint(0x21, ®s, ®s);
  150.  
  151.   time->hours = (regs.cx >> 8) & 0xFF;
  152.   time->minutes = regs.cx & 0xFF;
  153.   time->seconds = (regs.dx >> 8) & 0xFF;
  154.   time->centons = regs.dx & 0xFF;
  155. }
  156. -ARCHIVE- timedate.h 544
  157.  
  158. /*  timedate.h - Structure definitions for use with the library routines
  159.          get_time and get_date (centons are hundredths of a second)  */
  160.  
  161. struct date_struct { int month, day, year; };
  162. struct time_struct { int hours, minutes, seconds, centons; };
  163.  
  164. #define clear_date(dt) dt.month = dt.day = dt.year = 0
  165. #define clear_time(tm) tm.hours = tm.minutes = tm.seconds = tm.centons = 0
  166.  
  167. /*
  168.  *  extern get_date(cur_date)
  169.  *      struct date_struct *cur_date;
  170.  *
  171.  *  extern get_time(cur_time)
  172.  *      struct time_struct *cur_time;
  173.  */
  174. -ARCHIVE- timediff.c 436
  175. #include "timedate.h"
  176.  
  177. long time_diff(xtime, ytime)
  178.     struct time_struct *xtime;
  179.     struct time_struct *ytime;
  180.     {
  181.     register long diff;
  182.  
  183.     diff = xtime->hours * 3600000L;
  184.     diff += xtime->minutes * 60000L;
  185.     diff += xtime->seconds * 1000L;
  186.     diff += xtime->centons * 10L;
  187.  
  188.     diff -= ytime->hours * 3600000L;
  189.     diff -= ytime->minutes * 60000L;
  190.     diff -= ytime->seconds * 1000L;
  191.     diff -= ytime->centons * 10L;
  192.  
  193.     return(diff);
  194.     }
  195.  
  196.  
  197.